<?php

use App\Services\Rbac\AdminManager;
use Illuminate\Support\Str;
use Illuminate\Http\UploadedFile;

/**
*生成密码
* @param string  $raw
*
* @return string
* @author ldy
*/
function generate_pawd($raw)
{
    return password_hash(md5($raw), PASSWORD_DEFAULT);
}

/**
*校验密码
* @param string
* @param string
*
* @return boolean
* @author ldy
*/
function verify_pawd($input, $check)
{
    return password_verify(md5($input), $check);
}

/**
* 缓存用户信息，生成token
* @param array  缓存数据
* @param int 有效期，秒
*
* @return string
* @author ldy
*/
function generate_token($userdata, $life = 3600*3)
{
    $token = 'rating.system.'.md5(json_encode($userdata)).Str::random(40);

    \Cache::put($token, $userdata, $life);

    return $token;
}

/**
* 统一响应
* @param int  状态码
* @param array  响应数据
* @param string 提示信息
* @param int 错误码
*
* @return \Illuminate\Http\JsonResponse
* @author ldy
*/
function res($data = [], $code = 0, $message = 'success')
{
    return response()->json([
        'code' => $code,
        'msg' => $message,
        'data' => $data
    ], 200, [], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
}

//  将两个数相除并转换成百分制(四舍五入)
function number_rate($dividend, $divisor, $decimals = 2)
{
    $number = $divisor ? round(($dividend / $divisor) * 100, $decimals) : 0;

    return sprintf("%.{$decimals}f", $number) . '%';
}

//  获取文件名(两种类型的文件名)
function filename(UploadedFile $file, $isHash = false)
{
    return $isHash ?
        Str::random(40) . '.' . $file->getClientOriginalExtension() :
        date('YmdHis') . '_' . $file->getClientOriginalName();
}

// 包裹字符串
function wrap_string($strings, $wrap)
{
    if (is_array($strings)) {
        return array_map(function ($item) {
            return '"' . $item . '"';
        }, $strings);
    } else {
        return '"' . $strings . '"';
    }
}

function json_array_fill(?array $array, $value)
{
    if (!$array) {
        return [$value];
    }
    if (!in_array($value, $array)){
        $array[] = $value;
    }
    return $array;
}

function json_array_pull(?array $array, $value)
{
    if (is_array($array) && in_array($value, $array)) {
        array_splice($array, array_search($value, $array), 1);
        $array = $array ?: null;
    }
    return $array;
}

function json_array_set($judgement, ?array $array, $value)
{
    return $judgement ? json_array_fill($array, $value) : json_array_pull($array, $value);
}

// oss文件url前缀
function get_oss_prifix()
{
    return  env('OSS_URL').'/'.env('OSS_ROOT_DIR').'/';
}

function throwApiException($code=0,$message=null)
{
    throw new ApiException($code, $message);
}

/**
 * 小程序端获取用户信息
 */
function user()
{
    $token = request()->input('token');
}
